//----------------------------------------------------------------------------
// PHVCL - PHEmail - Tipo de mensagem utilizado para envio de email
//                   compativel com o PHSmtp.
// Copyright (c) 1992, 2008 PH Softwares Ltda. All Rights Reserved.
//----------------------------------------------------------------------------/
#include <vcl.h>
#pragma hdrstop

#include "PHEmail.h"
#include <dir.h>
#include <iostream.h>
#include <dirent.h>
#pragma package( smart_init )

//---------------------------------------------------------------------------
//  Metodos da Classe TEmail
//---------------------------------------------------------------------------
__fastcall TEmail::TEmail( void )
{
  IdMessage = new TIdMessage( NULL ); // Cria uma instancia da mensagem
  IdMessage->ContentType = "multipart/mixed"; // Define o Content da mensagem
  Texto = new TIdText( IdMessage->MessageParts, NULL ); // Cria uma parte do tipo texto
  Texto->ContentType = "text/plain";
  Texto->Body->Add( "" );
  Html = new TIdText( IdMessage->MessageParts, NULL );  // Cria uma parte do tipo html
  Html->ContentType = "text/html";
}

//---------------------------------------------------------------------------
__fastcall TEmail::~TEmail( void )
{
  delete IdMessage;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::SetRemetente( AnsiString Nome, AnsiString Endereco )
{
  IdMessage->From->Name = Nome;
  IdMessage->From->Address = Endereco;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::SetNomeRemetente( AnsiString Nome )
{
  IdMessage->From->Name = Nome;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::SetEnderecoRemetente( AnsiString Endereco )
{
  IdMessage->From->Address = Endereco;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AdicionaDestinatario( AnsiString Email )
{
  IdMessage->Recipients->EMailAddresses = Email;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AdicionaDestinatarioComCopia( AnsiString Email )
{
  IdMessage->CCList->EMailAddresses = Email;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AdicionaDestinatarioComCopiaOculta( AnsiString Email )
{
  IdMessage->BccList->EMailAddresses = Email;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::SetAssunto( AnsiString Assunto )
{
  IdMessage->Subject = Assunto;
}

//---------------------------------------------------------------------------
void __fastcall TEmail::SetCorpo( AnsiString Corpo )
{
  Texto->Body->Clear();
  Texto->Body->Add( Corpo );
}

//---------------------------------------------------------------------------
void __fastcall TEmail::SetCorpoHtml( AnsiString CorpoHtml )
{
  Html->Body->Clear();
  Html->Body->Add( CorpoHtml );
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AdicionaCorpo( AnsiString Corpo )
{
  Texto->Body->Add( Corpo );
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AdicionaCorpoHtml( AnsiString CorpoHtml )
{
  Html->Body->Add( CorpoHtml );
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AdicionaStreamAnexo( TMemoryStream*  Stream )
{
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AdicionaArquivoAnexo( AnsiString Arquivo )
{
  TMemoryStream*  ArquivoStream;
  try
   {
    ArquivoStream = new TMemoryStream();
    ArquivoStream->LoadFromFile( Arquivo );
    AdicionaStreamAnexo( ArquivoStream );
   }
  __finally
   {
    delete ArquivoStream;
   }
}

//---------------------------------------------------------------------------
void __fastcall TEmail::AnexaArquivosImagem( AnsiString MediaDir )
{
  DIR*  Dir = opendir( MediaDir.c_str() );
  if( Dir )
   {
    struct dirent*  File;
    // Anexa os arquivos com extensao .jpg
    while( ( File = readdir( Dir ) ) != NULL )
     {
      AnsiString Caminho = MediaDir + "\\" + File->d_name;
      AnsiString Content = "Content-ID: <" + ( AnsiString ) File->d_name + ">";
      if( GetExtensaoArquivo( File->d_name ) == "jpg" )
       {
        // anexa a imagem apartir do caminho
        TIdAttachment*  mpAnexo = new TIdAttachment( IdMessage->MessageParts, Caminho );
        mpAnexo->ContentType = "image/jpg";
        mpAnexo->Headers->Add( Content );
       }
     }
   }
  closedir( Dir );
}

//---------------------------------------------------------------------------
TIdMessage *__fastcall TEmail::GetEmail( void )
{
  return IdMessage;
}

//---------------------------------------------------------------------------
AnsiString __fastcall TEmail::GetDestinatario( void )
{
  return " <" + IdMessage->Recipients->EMailAddresses + ">";
}

//---------------------------------------------------------------------------
int __fastcall TEmail::GetTamanho( void )
{
  TMemoryStream*  EmailStream;
  int Tamanho;
  try
   {
    EmailStream = new TMemoryStream();
    IdMessage->SaveToStream( EmailStream, false );
    Tamanho = EmailStream->Size;
   }

  __finally
   {
    delete EmailStream;
   }

  return Tamanho;
}

//---------------------------------------------------------------------------
//  Funcao global
//---------------------------------------------------------------------------
AnsiString __fastcall GetExtensaoArquivo( AnsiString Arquivo )
{
  AnsiString FileName = ExtractFileName( Arquivo );
  int PosicaoPonto = FileName.AnsiPos( "." );
  return ( FileName.SubString( PosicaoPonto + 1, FileName.Length() ) );
}

//---------------------------------------------------------------------------


